home *** CD-ROM | disk | FTP | other *** search
/ Young Minds / Young Minds Interactive CD-ROM.ISO / backgamm / tutor.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-03-09  |  2.4 KB  |  135 lines

  1. /*
  2.  * Copyright (c) 1980 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms are permitted
  6.  * provided that this notice is preserved and that due credit is given
  7.  * to the University of California at Berkeley. The name of the University
  8.  * may not be used to endorse or promote products derived from this
  9.  * software without specific prior written permission. This software
  10.  * is provided ``as is'' without express or implied warranty.
  11.  */
  12.  
  13. #ifndef lint
  14. static char sccsid[] = "@(#)tutor.c    5.2 (Berkeley) 2/16/88";
  15. #endif /* not lint */
  16.  
  17. #include "back.h"
  18. #include "tutor.h"
  19.  
  20. extern int    maxmoves;
  21. extern char    *finis[];
  22.  
  23. extern struct situatn    test[];
  24.  
  25. static char    better[] = "That is a legal move, but there is a better one.\n";
  26.  
  27. tutor ()  {
  28.     register int    i, j;
  29.  
  30.     i = 0;
  31.     begscr = 18;
  32.     cturn = -1;
  33.     home = 0;
  34.     bar = 25;
  35.     inptr = &in[0];
  36.     inopp = &in[1];
  37.     offptr = &off[0];
  38.     offopp = &off[1];
  39.     Colorptr = &color[0];
  40.     colorptr = &color[2];
  41.     colen = 5;
  42.     wrboard();
  43.  
  44.     while (1)  {
  45.         if (! brdeq(test[i].brd,board))  {
  46.             if (tflag && curr == 23)
  47.                 curmove (18,0);
  48.             writel (better);
  49.             nexturn();
  50.             movback (mvlim);
  51.             if (tflag)  {
  52.                 refresh();
  53.                 clrest ();
  54.             }
  55.             if ((! tflag) || curr == 19)  {
  56.                 proll();
  57.                 writec ('\t');
  58.             }
  59.             else
  60.                 curmove (curr > 19? curr-2: curr+4,25);
  61.             getmove();
  62.             if (cturn == 0)
  63.                 leave();
  64.             continue;
  65.         }
  66.         if (tflag)
  67.             curmove (18,0);
  68.         text (*test[i].com);
  69.         if (! tflag)
  70.             writec ('\n');
  71.         if (i == maxmoves)
  72.             break;
  73.         D0 = test[i].roll1;
  74.         D1 = test[i].roll2;
  75.         d0 = 0;
  76.         mvlim = 0;
  77.         for (j = 0; j < 4; j++)  {
  78.             if (test[i].mp[j] == test[i].mg[j])
  79.                 break;
  80.             p[j] = test[i].mp[j];
  81.             g[j] = test[i].mg[j];
  82.             mvlim++;
  83.         }
  84.         if (mvlim)
  85.             for (j = 0; j < mvlim; j++)
  86.                 if (makmove(j))
  87.                     writel ("AARGH!!!\n");
  88.         if (tflag)
  89.             refresh();
  90.         nexturn();
  91.         D0 = test[i].new1;
  92.         D1 = test[i].new2;
  93.         d0 = 0;
  94.         i++;
  95.         mvlim = movallow();
  96.         if (mvlim)  {
  97.             if (tflag)
  98.                 clrest();
  99.             proll();
  100.             writec('\t');
  101.             getmove();
  102.             if (tflag)
  103.                 refresh();
  104.             if (cturn == 0)
  105.                 leave();
  106.         }
  107.     }
  108.     leave();
  109. }
  110.  
  111. clrest ()  {
  112.     register int    r, c, j;
  113.  
  114.     r = curr;
  115.     c = curc;
  116.     for (j = r+1; j < 24; j++)  {
  117.         curmove (j,0);
  118.         cline();
  119.     }
  120.     curmove (r,c);
  121. }
  122.  
  123. brdeq (b1,b2)
  124. register int  *b1, *b2;
  125.  
  126. {
  127.     register int  *e;
  128.  
  129.     e = b1+26;
  130.     while (b1 < e)
  131.         if (*b1++ != *b2++)
  132.             return(0);
  133.     return(1);
  134. }
  135.